Step 1b added: run BOTH gates before claiming Goal-Lx PASS.
- Gate 1: `winml config` diff against shipped recipe (strip `_note`).
- Gate 2: `winml build` baseline on main without `-c`.
If both gates show parity, the recipe is catalog-only — do not file.
Audit on 2026-06-23 found 6 of 6 recent recipe PRs (#933 #934 #943
#944 #945 #946) had zero CLI-surface delta over auto-config output.
All 6 closed; replacement = user runs `winml build -m <id>` direct.
SKILL.md additions:
- Step 0 Effort L0/L0★ guardrail
- Step 1b full procedure with verdict table
- Goal-axis guardrail (Lx evidence requires Step 1b real-delta)
- Step 4b trigger #8 (catalog-only escape) + next-id bump to 039
findings.json: _meta-038 with refines [_meta-013, _meta-018],
mechanism_confirmed=true, evidence cites the 6-PR audit.
PR: Helsinki-NLP/opus-mt-fr-en — translation recipe pair (fp32, CPU)
Iter: 6 (sibling checkpoint to opus-mt-en-ru; confirms marian-003 template generalizes per marian-004)
Producer: main agent (2026-06-23)
Claimed tier:
(Effort = L0★, Goal = L1-CPU, Outcome = L0)Summary
This PR ships the
Helsinki-NLP/opus-mt-fr-entranslation recipe pair, mirroring theopus-mt-en-rupattern. Confirms the marian-003 template is reusable across opus-mt checkpoints with no manual recipe edits (vocab size auto-regenerated viawinml config). Goal-L1-CPU PASSes on both halves. Goal-L2 not run independently (the en-ru sibling PR already validates the encoder L2; vocab-only delta does not change the graph structure). No source-code changes.Per
_meta-020, encoder + decoder ship as ONE PR.1. Recipe files
Diff vs
opus-mt-en-ru(sibling recipe):value_rangeoninput_ids/decoder_input_idsupper bound =59514(fr-en vocab) vs62518(en-ru vocab). No other deltas.Filename
fp16_*is cosmetic per_meta-014; recipe ships fp32.2. README index row
examples/recipes/README.md — row to add for
Helsinki-NLP/opus-mt-fr-en | translation | composite (encoder + decoder).3. Build output directory + artifact inventory
temp/opus_fr_en_build/{encoder,decoder}/(gitignored — referenced by path for reviewer re-execution):model.onnxmodel.onnx.dataanalyze_result.jsonexport_htp_metadata.jsonwinml_build_config.jsonmodel.onnxmodel.onnx.dataanalyze_result.jsonexport_htp_metadata.jsonwinml_build_config.jsonExternal-data layout check (
_meta-023): both halves crossed the 2GB → no, but build emitted external-data layout anyway (larger vocab makes fr-en cross size threshold per marian-004 gotcha)..dataco-located with.onnx. PASS.Encoder/decoder cross-attention alias check (
_meta-025): encoder output =encoder_hidden_states; decoder input =encoder_hidden_states. Direct name + shape match. PASS.4. Build log
Encoder build: 34.0s total (export 13.9s + optimize 10.1s). Decoder build: 42.3s total (export 22.9s + optimize 18.1s). Both completed with
✅ Build complete. Logs attemp/opus_fr_en_build/{encoder,decoder}_build.logper marian-004 mechanism_notes.5. Appended findings
Per-model —
model_knowledge/marian.jsonSkill-meta
No new
_meta-NNNfindings in this PR (Lane B).6. Optimum-coverage probe verdict
Same as opus-mt-en-ru —
marianmodel_type is VENDOR-COVERED ontext2text-generation(composite expansion → feature-extraction encoder + text2text-generation decoder). Effort L0★ confirmed.7. Claimed (Effort, Goal, Outcome) tier
winml configcall per checkpoint, no hand-edits)8. Goal-ladder verdict table (per
_meta-018, per-half per_meta-020)winml build→model.onnx+model.onnx.dataco-located; opset 17; fp32 weights_meta-016_meta-015winml build→model.onnx+model.onnx.dataco-located_meta-016_meta-018honest verdict._meta-015Short-circuit honored: no FAIL anywhere. L3 CLI-BLOCKED + L2-decoder DEFERRED-HARNESS do not halt the march.
Diligence ladder (
_meta-037): not invoked — BLOCKED verdicts are pre-classified host/CLI gaps, not failed attempts.9. Methodology-evolution declaration (per
_meta-031)No NEW methodology friction in this PR. This PR confirms marian-003's template-reuse claim (marian-004) without surfacing new triggers:
Reviewer should confirm "no methodology friction observed" per
_meta-031anti-trigger.Reviewer hand-off package — Step 6 9-item self-check